home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
gnu
/
dirent.lha
/
dirent
/
INSTALL
< prev
next >
Wrap
Text File
|
1988-07-09
|
5KB
|
123 lines
INSTALLATION INSTRUCTIONS
The following instructions are for systems resembling Ninth Edition UNIX, with
hints about dealing with variations you may encounter for your specific system.
Installation should be done only by someone who is comfortable with modifying
the standard C library and header files.
If your system already includes directory access routines, you should replace
them with this package. We're trying to get this standardized; see the
discussion in the NOTES file.
I have tried to make the source code as generic as possible, but if your system
predates Seventh Edition UNIX you will have problems.
DISCLAIMER: Although I believe the code and procedures described here to be
correct, I make no warranty of any kind, and you are advised to perform your
own careful testing before making any substantial change like this to your
programming environment.
0) For antique systems that do not support C's "void" data type, edit the file
sys.dirent.h to add the following:
typedef int void; /* good enough for govt work */
If for some reason your <sys/types.h> doesn't define them, add the
following to sys.dirent.h:
typedef unsigned short ino_t; /* (assuming original UFS) */
typedef long off_t; /* long is forced by lseek() */
None of this should be necessary for any modern UNIX system.
1) Copy the file dirent.h to /usr/include/dirent.h and copy the file
sys.dirent.h to /usr/include/sys/dirent.h. (The file sys._dir.h is also
provided for the BRL UNIX System V emulation for 4.nBSD. That environment
uses different directory names for everything.)
2) Copy the file directory.3c to /usr/man/man3/directory.3 and copy the file
dirent.4 to /usr/man/man5/dirent.5; edit the new file
/usr/man/man3/directory.3 to change the "SEE ALSO" reference from dirent(4)
to dirent(5) and to change the 3C on the first line to 3; edit the new file
/usr/man/man5/dirent.5 to change the 4 on the first line to 5; then print
the manual pages via the command
man directory dirent
to see what the new routines are like. (If you have a "catman" style of
on-line manual, adapt these instructions accordingly. Manual entries are
kept in directories with other names on some systems such as UNIX System V.
On systems that already had a directory library documented in some other
manual entry, remove the superseded manual entry; if the description of the
native filesystem directory format found by "man dir" refers to a directory
library, modify it to simply refer to the entry for "dirent".)
3) Copy the files closedir.c, opendir.c, readdir.c, rewinddir.c, seekdir.c,
and telldir.c to the "gen" or "port/gen" subdirectory of your C library
source directory. If you do not have a getdents() system call, copy the
file getdents.c to the "sys" or "port/sys" subdirectory and copy the file
getdents.2 to /usr/man/man2/getdents.2 (actually you may prefer to put this
file in section 3 and adjust the references in the other manual entries
accordingly; also adjust the references to dirent(4) to be to dirent(5) if
that's where the entry is). Edit the C library makefile(s) to include the
new object modules in the C library. (See the comments at the beginning of
getdents.c for symbols that must be defined to configure getdents.c.) Then
remake and reinstall the C library. Alternatively, you can just compile
the new sources and insert their objects near the front of the C library
/lib/libc.a using the "ar" utility (seekdir.o should precede readdir.o,
which in turn should precede getdents.o). On some systems you then need to
use the "ranlib" utility to update the archive symbol table.
4) After the C library has been updated, delete /usr/include/ndir.h or any
other header used with a previous directory library to prevent inadvertent
use of the superseded directory access interface. Also delete any
corresponding library such as /usr/lib/libndir.a.
5) To verify installation, try compiling, linking, and running the program
testdir.c. This program searches the current directory "." for each file
named as a program argument and prints `"FOO" found.' or `"FOO" not found.'
where FOO is of course replaced by the name being sought in the directory.
Try something like
cd /usr/bin # a multi-block directory
WHEREVER/testdir FOO lint BAR f77 XYZZY
which should produce the output
"FOO" not found.
"lint" found.
"BAR" not found.
"f77" found.
"XYZZY" not found.
A more thorough test would be
cd /usr/bin # a multi-block directory
WHEREVER/testdir `ls -a` | grep 'not found'
This program does not test the seekdir() and telldir() functions.
6) Notify your programmers that all directory access must be made through the
new interface, and that documentation is available via
man directory dirent
Make the NOTES file available to those programmers who might want to
understand what this is all about.
7) Change all system sources that were accessing directories to use the new
routines. Nearly all such sources contain the line
#include <sys/dir.h>
or
#include <ndir.h>
so they should be easy to find. (If you earlier removed some other header
file, that is, if this package superseded an earlier version of the
directory access library, look for its name too. See the conversion
instructions in the NOTES file.)